﻿//using Aliyun.OSS;
//using Aliyun.OSS.Common;
//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using System.Text;

//namespace XW.Utils.Tool
//{
//    public class AliyunOssHelper
//    {
//		const string accessKeyId = "LTAI4GKy9PyALrZeX7sQjBBb";
//		const string accessKeySecret = "5uu6es49UsCNIObKf7ew4xtRg8Mh05";
//		const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
//		public const string cdn = "http://sanhepic.oss-cn-hangzhou.aliyuncs.com/";
//		public static string bucketName = "sanhepic";

//		/// <summary>
//		/// oss客户端对象
//		/// </summary>
//		private OssClient ossClient;
//		/// <summary>
//		/// 配置
//		/// </summary>
//		public ClientConfiguration ossConfig;
//		/// <summary>
//		/// 构造函数
//		/// </summary>
//		public AliyunOssHelper()
//		{
//			//默认配置
//			ossConfig = new ClientConfiguration();
//			//
//			ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret, ossConfig);
//		}

//		#region 存储空间相关操作
//		/// <summary>
//		/// 获取账户下所有存储空间名称
//		/// </summary>
//		/// <returns></returns>
//		public List<string> GetAllBucket()
//		{
//			try
//			{
//				var buckets = ossClient.ListBuckets();
//				if (buckets != null && buckets.Count() > 0)
//				{
//					return buckets.Select(e => e.Name).ToList();
//				}
//				else
//				{
//					return new List<string>();
//				}
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		/// <summary>
//		/// 在OSS中创建一个新的存储空间。
//		/// </summary>
//		/// <param name="bucketName">要创建的存储空间的名称</param>
//		public void CreateBucket(string bucketName)
//		{
//			try
//			{
//				//BucketName具有全局唯一性。
//				var exist = ossClient.DoesBucketExist(bucketName);
//				if (!exist)
//				{
//					ossClient.CreateBucket(bucketName);
//				}
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		/// <summary>
//		/// 删除存储空间
//		/// </summary>
//		/// <param name="bucketName"></param>
//		public void DeleteBucket(string bucketName)
//		{
//			try
//			{
//				ossClient.DeleteBucket(bucketName);
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		#endregion

//		#region 文件相关操作
//		/// <summary>
//		/// 上传本地的文件到指定的OSS的存储空间
//		/// </summary>
//		/// <param name="bucketName">指定的存储空间名称</param>
//		/// <param name="key">文件的在OSS上保存的名称</param>
//		/// <param name="fileToUpload">指定上传文件的本地完整路径</param>
//		public string PutObject(string bucketName, string key, string fileToUpload)
//		{
//			try
//			{
//				var result = ossClient.PutObject(bucketName, key, fileToUpload);
//				return result.ETag;
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		/// <summary>
//		/// 上传文件到指定的OSS的存储空间
//		/// </summary>
//		/// <param name="bucketName">指定的存储空间名称</param>
//		/// <param name="key">文件的在OSS上保存的名称</param>
//		/// <param name="binaryData">文件字节流</param>
//		/// <returns></returns>
//		public string PutObject(string bucketName, string key, byte[] binaryData)
//		{
//			try
//			{
//				MemoryStream requestContent = new MemoryStream(binaryData);
//				var result = ossClient.PutObject(bucketName, key, requestContent);
//				return result.ETag;
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}

//		public string PutObject(string bucketName, string key,Stream stream)
//		{
//			try
//			{ 
//				var result = ossClient.PutObject(bucketName, key, stream);
//				return result.ETag;
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		/// <summary>
//		/// 下载文件流
//		/// </summary>
//		/// <param name="bucketName">指定的存储空间名称</param>
//		/// <param name="key">文件的在OSS上保存的名称</param>
//		public byte[] DownLoadObject(string bucketName, string key)
//		{
//			try
//			{
//				var obj = ossClient.GetObject(bucketName, key);
//				if (obj != null)
//				{
//					using (var requestStream = obj.Content)
//					{
//						byte[] bytes = new byte[requestStream.Length];
//						requestStream.Read(bytes, 0, bytes.Length);
//						requestStream.Seek(0, SeekOrigin.Begin);
//						return bytes;
//					}
//				}
//				return null;
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		/// <summary>
//		/// 删除指定的文件
//		/// </summary>   
//		/// <param name="bucketName">文件所在存储空间的名称</param>
//		/// <param name="key">待删除的文件名称</param>
//		public void DeleteObject(string bucketName, string key)
//		{
//			try
//			{
//				ossClient.DeleteObject(bucketName, key);
//			}
//			catch (Exception ex)
//			{
//				throw ex;
//			}
//		}
//		/// <summary>
//		/// 复制文件
//		/// </summary>
//		/// <param name="sourceBucket">源Bucket</param>
//		/// <param name="sourceObject">源key</param>
//		/// <param name="targetBucket">目标Bucket</param>
//		/// <param name="targetObject">目标Key</param>
//		public void CopyObject(string sourceBucket, string sourceObject, string targetBucket, string targetObject)
//		{
//			try
//			{
//				var metadata = new ObjectMetadata();
//				metadata.AddHeader("mk1", "mv1");
//				metadata.AddHeader("mk2", "mv2");
//				var req = new CopyObjectRequest(sourceBucket, sourceObject, targetBucket, targetObject)
//				{

//					NewObjectMetadata = metadata
//				};
//				// 拷贝文件。
//				ossClient.CopyObject(req);
//			}
//			catch (Exception ex)
//			{

//				throw ex;
//			}
//		}
//		/// <summary>
//		/// URL签名授权访问(上传)
//		/// </summary>
//		/// <param name="bucketName"></param>
//		/// <param name="key"></param>
//		/// <returns></returns>
//		public string[] GetUploadFileOssUrl(string bucketName, string key)
//		{
//			// 生成PUT方法的URL
//			var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Put)
//			{
//				Expiration = DateTime.Now.AddMinutes(30),
//				ContentType = "image/*"
//			};
//			var uri = ossClient.GeneratePresignedUri(req);
//			string AbsolutePath = cdn + uri.AbsolutePath;
//			string AbsoluteUri = uri.AbsoluteUri;
//			return new string[] { AbsolutePath, AbsoluteUri };
//		}
//		/// <summary>
//		/// URL签名授权访问(删除)
//		/// </summary>
//		/// <param name="bucketName"></param>
//		/// <param name="key"></param>
//		/// <returns></returns>
//		public string GetDeleteFileOssUrl(string bucketName, string key)
//		{
//			// 生成PUT方法的URL
//			var req = new GeneratePresignedUriRequest(bucketName, key, SignHttpMethod.Delete)
//			{
//				Expiration = DateTime.Now.AddMinutes(15),
//				ContentType = "image/*"
//			};
//			var uri = ossClient.GeneratePresignedUri(req);
//			return uri.AbsolutePath;
//		}

//		public string GetMD5HashFromFile(string fileName)
//		{
//			try
//			{
//				FileStream file = new FileStream(fileName, FileMode.Open);
//				System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
//				byte[] retVal = md5.ComputeHash(file);
//				file.Close();

//				StringBuilder sb = new StringBuilder();
//				for (int i = 0; i < retVal.Length; i++)
//				{
//					sb.Append(retVal[i].ToString("x2"));
//				}
//				return sb.ToString();
//			}
//			catch (Exception ex)
//			{
//				throw new Exception("GetMD5HashFromFile() fail, error:" + ex.Message);
//			}
//		}

//		#endregion

//	}
//}
